/**
  ******************************************************************************
  * @file    sim900a.h
  * @author  ashuai0110
  * @version V2.4
  * @date    2024-09-10
  * @brief   SIM900A模组AT指令集
  *
  ******************************************************************************
  * @attention
  *
  * 版权声明:内容为编者(ashuai0110)原创,使用请注明出处,当然,你也可以不这样做^_^
  * 出处链接:https://gitee.com/ashuai0110/mcu_reuse_development_module.git
  *
  ******************************************************************************
  */

#ifndef __SIM900A_H
#define __SIM900A_H

#ifdef __cplusplus
extern "C" {
#endif

/* 包含头文件-----------------------------------------------------------------*/
#include "common_include.h"
#include "command_at.h"

/**
 * @addtogroup devices
 * @{
 */

/**
 * @defgroup sim900a sim900a
 * @{
 */

/* 宏定义---------------------------------------------------------------------*/
/**
 * @defgroup sim900a_global_macros sim900a global macros
 * @{
 */

#define SIM900A_HEAD                    "AT+"  /*!< AT指令帧头 */
#define SIM900A_TAIL                    "\r\n" /*!< AT指令帧尾 */

/* 读取sim卡状态 */
#define SIM900A_R_CPIN                  "AT+CPIN?\r\n" /*!< 读取sim卡状态 */
#define SIM900A_R_CPIN_RET              "OK"           /*!< 读取命令的回复 */
/* 设置短信的收发模式 */
#define SIM900A_W_CMGF                  "AT+CMGF=%d\r\n" /*!< 设置短信的收发模式 0:PDU模式 1:TXT文本模式 */
#define SIM900A_W_CMGF_RET              "OK"             /*!< 设置命令的回复 */
/* 设置目标手机号 */
#define SIM900A_W_CMGS                  "AT+CMGS=\"%s\"\r\n" /*!< 设置目标手机号 */
#define SIM900A_W_CMGS_RET              ">"                  /*!< 设置命令的回复 */
/* 短信确认发送 */
#define SIM900A_W_SEND_MES              (0x1A) /*!< 短信确认发送 */
#define SIM900A_W_SEND_MES_RET          "OK"   /*!< 设置命令的回复 */

/**
 * @}
 */

/* 类型定义-------------------------------------------------------------------*/
/**
 * @defgroup sim900a_global_types sim900a global types
 * @{
 */

/**
  * @brief  sim900a structure definition
  */
typedef struct sim900a {
    char message[48]; /*!< 短信数据缓存区 */
    char phone[16];   /*!< 手机号缓存区 */
    uint8_t state;    /*!< 流程状态 */
} sim900a_t;

/**
 * @}
 */

/* 全局变量-------------------------------------------------------------------*/

/* 函数原型-------------------------------------------------------------------*/
/**
 * @addtogroup sim900a_global_functions
 * @{
 */

void sim900a_init(mw_rw_fn_t readFn, mw_rw_fn_t writeFn);

void sim900a_set_rec_flag(void);

uint8_t sim900a_check_sim(void);

uint8_t sim900a_send_mes(const char *phone, const char *message);

uint8_t sim900a_send_mes_poll(void);

/**
 * @}
 */

/**
 * @}
 */

/**
 * @}
 */

#ifdef __cplusplus
}
#endif

#endif /* sim900a.h */
